package dynamicStudy;

import java.io.FileInputStream;
import java.util.Arrays;
import java.util.stream.Stream;

public class MaxProfit5 {

    /**
     * LeetCode T309 最佳买卖股票时期含冷冻期
     * @param args
     */
    public static void main(String[] args) {
        int[] prices = new int[]{6, 1, 3, 2, 4, 7};
        System.out.println(maxProfit(prices));
    }

    /**
     * LeetCode T309
     * @param prices
     * @return
     */
    public static int maxProfit(int[] prices) {
        int days = prices.length;
        //算出最大可交易的次数
        int n = days/2;
        int[][] buy = new int[days][n + 1];
        int[][] sell = new int[days][n + 1];
        //进行初始化
        for (int i = 0; i <= n; i++){
            buy[0][i] = -prices[0];
        }
        //buy[0][0] = -prices[0];
        //进行循环
        for (int i = 1; i < days; i++){
            buy[i][0] = Math.max(buy[i - 1][0], -prices[i]);
            for (int j = 1; j <= n; j++){
                //买入具有冷却期，最后一步，可以选择购买，也可以选择不买，如果购买就要考虑冷静期
                //buy[i - 1][j]选择不买，直接使用上一天j次购买的值。
                buy[i][j] = Math.max(buy[i - 1][j],i >= 2?sell[i - 2][j]:0 - prices[i]);
                //不卖或者卖出
                sell[i][j] = Math.max(sell[i - 1][j], buy[i - 1][j - 1] + prices[i]);
            }
        }
        return Arrays.stream(sell[days - 1]).max().getAsInt();
    }
}
